package com.origin.niuke;

import java.util.Arrays;

/**
 * @author yzh
 * @version 1.0
 * @date 2022/4/17 22:35
 * 算法：数组
 * 三次旋转
 * 1、旋转整个数组
 * 2、比如将最后 M 个数喜欢至前面的 M 个位置，旋转前 M 个数
 * 3、旋转后 M 个数
 */
public class 旋转数组 {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(new 旋转数组().solve(6, 2, new int[]{1, 2, 3, 4, 5, 6})));
    }

    public int[] solve(int n, int m, int[] a) {
        // 防止溢出
        m = m % n;
        reverse(a, 0, n - 1);
        reverse(a, 0, m - 1);
        reverse(a, m, n - 1);
        return a;
    }
    void reverse(int[] a, int begin, int end) {
        if (begin < 0 || begin >= a.length || end < 0 || end <= a.length) return;
        while (begin < end) {
            swap(a, begin, end);
            ++begin;
            --end;
        }
    }
    void swap(int[] a, int i, int j) {
        int tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }

}
